package com.docking.heylo.service;

import com.docking.heylo.dao.entity.UserBank;
import com.docking.heylo.enums.EAccountRecord;
import com.docking.heylo.enums.EOrderState;
import com.docking.heylo.enums.EPayMethod;
import com.docking.heylo.web.dto.UserBankDto;
import com.docking.heylo.web.dto.WithdrawDto;
import com.github.pagehelper.PageInfo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/***
 * 用户账户
 *
 */
public interface IAccountService {


    /***
     * 开户
     * @param userId
     */
    public void openAccount(int userId);


    /***
     * 入账
     * @param userId                    用户ID
     * @param amount                    支付金额
     * @param remark                    支付描述
     * @param businessId                业务ID
     * @param value1                    扩展字段
     * @param businessType              业务类型
     * @param payMethod                 支付方式
     * @param orderState                支付状态
     */
    public void credit(int userId, BigDecimal amount, String remark, int businessId,
                       String value1, EAccountRecord.BusinessYype businessType,
                       EPayMethod payMethod, EOrderState orderState);

    /***
     * 支出
     * @param userId                    用户ID
     * @param amount                    支付金额
     * @param remark                    支付描述
     * @param businessId                业务ID
     * @param value1                    扩展字段
     * @param businessType              业务类型
     * @param payMethod                 支付方式
     * @param orderState                支付状态
     */
    public void payOut(int userId, BigDecimal amount, String remark, int businessId, String value1,
                       EAccountRecord.BusinessYype businessType, EPayMethod payMethod, EOrderState orderState);

    /***
     * 更新账户记录状态
     */
    public void updateStatus(int userId, String value1, EOrderState orderState);


    /***
     * 查看当前用户账户信息
     *
     * @return
     */
    Map<String,Object> info();

    /***
     * 查看用户银行卡列表
     *
     * @return
     */
    List<UserBank> userBanks();

    /***
     * 新增用户银行卡
     *
     * @param userBankDto
     */
    void saveBank(UserBankDto userBankDto);

    /***
     * 移除用户银行卡
     *
     * @param userBank
     */
    void removeBankCard(UserBank userBank);

    /***
     * 申请提现
     *
     * @param withdrawDto
     */
    void withdraw(WithdrawDto withdrawDto);

    /***
     * 获取用户账户历史记录
     *
     * @param withdrawDto
     * @return
     */
    PageInfo<Map<String,Object>> historyRecord(WithdrawDto withdrawDto);
}
